<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- extends扩展 super超类（父类） -->
    <script>
        // ·实现动物类，属性：物种名，方法：吃
        class Animal {
            constructor(type) {
                this.type = type
            }

            eat(food) {
                console.log(`${this.type}正在饕餮${food}`);
            }
        }

        // ·实现狗狗类，拥有动物的一切属性和方法，此外还有昵称属性和咬人方法
        // extends关键字代表继承于Animal父类（其底层原理是：Dog.prototype = new Animal()）
        // 一旦继承 则所有的Dog实例 都拥有Animal的全部实例方法
        class Dog extends Animal {
            constructor(nickname){
                // 调用父类构造方法 实现type的继承 而且写死为狗狗
                super("狗狗")
                this.nickname = nickname
            }

            /* 覆盖/重写（override）父类方法 */
            // 不覆盖则默认使用父类的eat方法 覆盖后优先使用自己的eat
            eat(food){
                console.log(`${this.nickname}正在饕餮${food}`);
            }

            bite(who){
                console.log(`${this.nickname}正在撕咬${who}`);
            }
        }

        const d = new Dog("臭皮")
        console.log(d);
        d.eat("翔")
        d.bite("涛哥")

    </script>
</body>

</html>